﻿using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Web;

namespace ASPNETPerformance.App_BusinessLogic.ViewState {
    public class ViewStateCompression {
        public ViewStateCompression() {
            //
            // TODO: Add constructor logic here
            //
        }

        // 压缩
        public static byte[] Compress( byte[] data ) {
            MemoryStream output = new MemoryStream();
            GZipStream gzip = new GZipStream( output, CompressionMode.Compress, true );
            gzip.Write( data, 0, data.Length );
            gzip.Close();
            return output.ToArray();
        }

        // 解压缩
        public static byte[] Decompress( byte[] data ) {
            MemoryStream input = new MemoryStream();
            input.Write( data, 0, data.Length );
            input.Position = 0;
            GZipStream gzip = new GZipStream( input,
                              CompressionMode.Decompress, true );
            MemoryStream output = new MemoryStream();
            byte[] buff = new byte[ 64 ];
            int read = -1;
            read = gzip.Read( buff, 0, buff.Length );
            while ( read > 0 ) {
                output.Write( buff, 0, read );
                read = gzip.Read( buff, 0, buff.Length );
            }
            gzip.Close();
            return output.ToArray();
        }
    }
}
